package com.cskaoyan.day5.map._05_homework;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 1, 给定一个字符串数组 words 和一个字符串 chars. 如果一个字符串能被 chars 里面的字符组成，那么这个字符串就是"好"的(chars里面每个字符只能使用一次)。
 * 求：words 里面所有好的字符串的字符总个数。
 * <p>
 * 比如：
 * words = ["cat", "bt", "hat", "tree"]
 * chars = "atach"
 * 好的字符串有 "cat", "hat", 3 + 3 = 6.
 * 输出：6
 *
 * @author Common-zhou
 * @since 2023-03-03 20:27
 */
public class HomeWork1 {
    public static void main(String[] args) {
        String chars = "atach";

        // Map存  Character Integer: 第一个是字符 第二个是出现的次数
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < chars.length(); i++) {
            char charAt = chars.charAt(i);
            Integer integer = map.get(charAt);
            if (integer == null) {
                integer = 0;
            }
            map.put(charAt, ++integer);
        }
        System.out.println(map);

        String[] strings = {"cat", "bt", "hat", "tree"};

        // 符合条件的好单词
        List<String> candidateStr = new ArrayList<>();

        for (String string : strings) {
            Map<Character, Integer> map1 = new HashMap<>(map);

            boolean flag = checkGoodWords(string, map1);

            if (flag) {
                candidateStr.add(string);
            }
        }

        System.out.println("好的单词： " + candidateStr);
    }

    /**
     * @param actualWords 实际的单词  cat
     * @param map1        key是字符，value是出现的次数, atach  --> 字符
     * @return
     */
    private static boolean checkGoodWords(String actualWords, Map<Character, Integer> map1) {

        // catc
        for (int i = 0; i < actualWords.length(); i++) {
            //  c
            char key = actualWords.charAt(i);
            Integer count = map1.get(key);
            if (count == null || count <= 0) {
                return false;
            }

            count--;
            map1.put(key, count);
        }

        return true;
    }


}
